home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / TECHNICA / COMPUTER / 0966.ZIP / ETCH.ARC / ETCH.BAS < prev    next >
BASIC Source File  |  1986-12-13  |  52KB  |  1,673 lines

  1. START: CLS: KEY OFF: SCREEN 2
  2.     KEY 1,CHR$(127): KEY 2,CHR$(14): KEY 3,CHR$(15): KEY 4,CHR$(16): KEY 5,CHR$(17): KEY 6,CHR$(19): KEY 10,CHR$(18)
  3.         DIM SX(3970): DIM SW(4000)
  4.         DIM GB(100)
  5.         DIM Q$(10)
  6.         DIM CZ(10)  : DIM CA(10)
  7.         DIM WS(80) : DIM EN(80):  DIM PLU(80)
  8.         DIM Q1(50) : DIM Q2(40):  DIM Q3(60) : DIM Q4(80): DIM Q5(20)
  9.     PZ=7: PY=16: TY=16: TZ=-1: GZ=PZ: GY=PY
  10.     OPEN "SETUP.DAT" AS #1
  11.     FIELD #1,20 AS IA$,10 AS IB$,2 AS IC$
  12.     GET #1,1
  13.     PTH$=LEFT$(IA$,INSTR(IA$," ")-1)
  14.     MPH$=PTH$
  15.     YARBLOCKO=VAL(IB$)
  16.     MXF=VAL(IC$)
  17.     CLOSE
  18.     NAMD$="Untitled"
  19.     FONT$=PTH$+"FONT1.DAT": FONT=1
  20.     DEFINT K,Z,Y,X
  21.     LINE (0,0)-(639,8),1,BF
  22.     GET (0,0)-(79,7),Q1
  23.     GET (0,0)-(55,7),Q2
  24.     GET (0,0)-(111,7),Q3
  25.     GET (0,0)-(135,7),Q4
  26.     GET (0,0)-(23,7),Q5
  27.     GOSUB BORDER
  28.     O=1: X=320: Y=100: CO=1: O=1: OY=1: OX=1: LM=0: MN=0
  29.     GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  30.     MAIN: A$=""
  31.         M1: B$=INKEY$: IF B$<>"" THEN A$=B$: GOTO M1:
  32.         F=POINT(H,K)
  33.         IF A$=CHR$(127) THEN GOTO HELP
  34.         IF A$=CHR$(14) THEN GOTO CLOCK
  35.         IF A$=CHR$(15) THEN GOTO DISKDIR
  36.         IF A$=CHR$(16) THEN GOTO CALC
  37.         IF A$=CHR$(17) THEN GOTO HEADLINE
  38.         IF A$=CHR$(18) THEN GOTO QUIT
  39.         IF A$=CHR$(19) THEN GOTO ICON
  40.         IF A$="-" THEN GOTO FONT
  41.         IF A$="+" THEN GOTO FONT
  42.         IF A$="O" THEN GOTO CURSOR
  43.         IF A$="F" THEN GOTO FILL
  44.         IF A$="f" THEN GOTO TILE
  45.         IF A$="t" THEN GOTO TEXT
  46.         IF A$="L" THEN GOTO DLINE
  47.         IF A$="C" THEN GOTO DCIRCLE
  48.         IF A$="J" THEN GOTO JUMP
  49. HOME:   IF A$="H" THEN X=320: Y=100: LINE (X,Y)-(X+LM,Y+MN),CO,BF: GOSUB SM4: GOTO MAIN
  50. ETRASH: IF A$="E" THEN CO=0: GOSUB SM2: GOTO MAIN
  51. EDRAW:  IF A$="D" THEN CO=1: GOSUB SM2: GOTO MAIN
  52.         IF A$="P" THEN GOTO PLARGE
  53.         IF A$="p" THEN GOTO PSMALL
  54.         IF A$="S" THEN GOTO DSAVE
  55.         IF A$="R" THEN GOTO DLOAD
  56.         IF A$="N" THEN GOTO RENAME
  57.         IF A$="K" THEN GOTO PURGE
  58.         IF A$="X" THEN GOTO NEGA1
  59.         IF A$="x" THEN GOTO NEGA2
  60.         IF A$="g" THEN GOTO MOVE
  61.         IF A$="q" THEN GOTO CSTEP
  62.         IF A$="/" THEN GOTO KLINE
  63.         IF A$="\" THEN GOTO ETCHCOM
  64.         IF A$="B" THEN GOTO BOX
  65.         IF A$="M" THEN GOTO MAGNIFY
  66.         IF A$="1" THEN
  67.             X=X-10: Y=Y+5: GOTO M9
  68.         ELSEIF A$="2" THEN
  69.             Y=Y+5: GOTO M9
  70.         ELSEIF A$="3" THEN
  71.             X=X+10: Y=Y+5: GOTO M9
  72.         ELSEIF A$="4" THEN
  73.             X=X-10: GOTO M9
  74.         ELSEIF A$="6" THEN
  75.             X=X+10: GOTO M9
  76.         ELSEIF A$="7" THEN
  77.             X=X-10: Y=Y-5: GOTO M9
  78.         ELSEIF A$="8" THEN
  79.             Y=Y-5: GOTO M9
  80.         ELSEIF A$="9" THEN
  81.             X=X+10: Y=Y-5: GOTO M9
  82.         END IF
  83.         IF LEN(A$)<>2 THEN GOTO M2
  84.         AQ=ASC(RIGHT$(A$,1))
  85.         IF AQ=77 THEN
  86.                 X=X+OX
  87.             ELSEIF AQ=75 THEN
  88.                 X=X-OX
  89.             ELSEIF AQ=72 THEN
  90.                 Y=Y-OY
  91.             ELSEIF AQ=80 THEN
  92.                 Y=Y+OY
  93.             ELSEIF AQ=79 THEN
  94.                 Y=Y+OY
  95.                 X=X-OX
  96.             ELSEIF AQ=81 THEN
  97.                 Y=Y+OY
  98.                 X=X+OX
  99.             ELSEIF AQ=71 THEN
  100.                 Y=Y-OY
  101.                 X=X-OX
  102.             ELSEIF AQ=73 THEN
  103.                 Y=Y-OY
  104.                 X=X+OX
  105.             ELSE GOTO MAIN
  106.         END IF
  107. M9:     IF X<0 THEN X=639 ELSE IF X>639 THEN X=0
  108.         IF Y<10 THEN Y=199 ELSE IF Y>199 THEN Y=10
  109.         GOSUB SM4
  110. M2:
  111.     LINE (X,Y)-(X+LM,Y+MN),0,BF: LINE (X,Y)-(X+LM,Y+MN),1,BF
  112.     IF CO=1 THEN LINE (X,Y)-(X+LM,Y+MN),(1-CO),BF: LINE (X,Y)-(X+LM,Y+MN),CO,BF: GOTO MAIN
  113.     IF F=-1 THEN LINE (X,Y)-(X+LM,Y+MN),1,BF ELSE LINE (X,Y)-(X+LM,Y+MN),0,BF: GOTO MAIN
  114. GOTO MAIN    ' End of START main routine.
  115.  
  116. SM1:
  117.     LOCATE 1,43
  118.     PRINT "Step X:";
  119.     PRINT USING "###";OX;
  120.     PRINT "  Y:";
  121.     PRINT USING "###";OY;
  122.     PUT (336,0),Q4,XOR
  123. RETURN
  124.  
  125. SM2:
  126.     IF CO=0 THEN
  127.         LOCATE 1,30
  128.         PRINT "Erase Mode";
  129.         PUT (232,0),Q1,XOR
  130.     ELSEIF CO=1 THEN
  131.         LOCATE 1,30
  132.         PRINT "Draw  Mode";
  133.         PUT (232,0),Q1,XOR
  134.     END IF
  135. RETURN
  136.  
  137. SM3:
  138.     LOCATE 1,5
  139.     PRINT NAMD$;STRING$(14-LEN(NAMD$),32);: PUT (32,0),Q3,XOR
  140. RETURN
  141.  
  142. SM4:
  143.     LOCATE 1,65
  144.     PRINT USING "### ###";X;Y;
  145.     PUT (512,0),Q2,XOR
  146. RETURN
  147.  
  148. SM5:
  149.     LOCATE 1,25
  150.     PRINT "#";
  151.     PRINT USING "##";FONT;
  152.     PUT (192,0),Q5,XOR
  153. RETURN
  154.  
  155. DLINE: ' Line from (X,Y) to (H,K).
  156.     GET (3,12)-(336,43),SW: LINE (3,12)-(336,43),0,BF
  157.     LINE (3,12)-(336,43),1,B: LINE (5,14)-(334,41),1,B
  158.     LOCATE 3,26: PRINT "Line Function";
  159.     LOCATE 4,2
  160.     PRINT "Line from (";
  161.     PRINT USING "###";X;: PRINT ",";: PRINT USING "###";Y;
  162.     PRINT ") to  (____,____)";
  163.         BL=48: BU=57: REY=4: REX=27: MAXL=3: GOSUB RECIEVE
  164.         H=VAL(HW$)
  165.         BL=48: BU=57: REY=4: REX=32: MAXL=3: GOSUB RECIEVE
  166.         K=VAL(HW$)
  167.     IF H<0 THEN H=0 ELSE IF H>639 THEN H=639
  168.     IF K<10 THEN K=10 ELSE IF K>199 THEN K=199
  169.     LOCATE 5,2 : PRINT "Colour...(Black=0, White=1)...";
  170.         BL=48: BU=49: REY=5: REX=32: MAXL=1: GOSUB RECIEVE
  171.         CD=VAL(HW$)
  172.     LINE (3,12)-(336,43),0,BF: PUT (3,12),SW,PSET: LINE (X,Y)-(H,K),CD
  173. GOTO MAIN
  174.  
  175. DCIRCLE: ' Circle Function
  176.     GET (3,12)-(320,85),SW
  177.     LINE (3,12)-(320,85),0,BF: LINE (3,12)-(320,85),1,B: LINE (5,14)-(318,83),1,B
  178.     LOCATE 3,24: PRINT "Circle Function";
  179.     LOCATE 4,3 : PRINT "Radius.......................";
  180.         BL=46: BU=57: REY=4: REX=33: MAXL=3: GOSUB RECIEVE
  181.         RD=VAL(HW$)
  182.     LOCATE 5,3 : PRINT "Colour..(Black=0, White=1)...";
  183.         BL=48: BU=49: REY=5: REX=33: MAXL=1: GOSUB RECIEVE
  184.         IF HW$="" THEN HW$="1": LOCATE 6,33: PRINT "  1";
  185.         CD=VAL(HW$)
  186.     LOCATE 6,3 : PRINT "X:Y Ratio....................";
  187.         BL=46: BU=57: REY=6: REX=33: MAXL=5: GOSUB RECIEVE
  188.         RA=VAL(HW$)
  189.     IF RA=0 THEN RA=.42: LOCATE 6,33: PRINT ".42";
  190.     LOCATE 7,3 : PRINT "Degree Start.................";
  191.         BL=48: BU=57: REY=7: REX=33: MAXL=3: GOSUB RECIEVE
  192.         WS$=HW$
  193.     IF WS$="" THEN WS$="0": LOCATE 7,33: PRINT "  0";
  194.     BG=VAL(WS$)*(3.1415927#/180)
  195.     LOCATE 8,3 : PRINT "Degree End...................";
  196.         BL=48: BU=57: REY=8: REX=33: MAXL=3: GOSUB RECIEVE
  197.         WS$=HW$
  198.     IF WS$="" THEN WS$="360": LOCATE 8,33: PRINT "360";
  199.     EG=VAL(WS$)*(3.1415927#/180)
  200.     LOCATE 10,3: PRINT "Esc to Cancel.  Return to Go.";
  201.  
  202. dc1: WVZ$=INKEY$: IF WVZ$="" THEN goto dc1
  203.     IF WVZ$=CHR$(13) THEN
  204.             LINE (3,12)-(320,85),0,BF
  205.             PUT (3,12),SW,PSET
  206.             CIRCLE (X,Y),RD,CD,BG,EG,RA
  207.             FOR Y1=0 TO 9
  208.                 LINE (0,Y1)-(639,Y1),0
  209.             NEXT Y1
  210.             LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  211.             GOTO MAIN
  212.         ELSEIF WVZ$=CHR$(27) THEN
  213.             RD=0: CD=1: RA=.42: BG=0: EG=360
  214.             LINE (3,12)-(320,85),O,BF
  215.             PUT (3,12),SW,PSET
  216.             GOTO MAIN
  217.         ELSE GOTO DC1
  218.     END IF
  219.  
  220. FILL: 'Fill screen with pixels.
  221.     PSET (X,Y),0: PAINT (X,Y),1
  222.     FOR Y1=0 TO 9
  223.         LINE (0,Y1)-(639,Y1),0
  224.     NEXT Y1
  225.     LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  226. GOTO MAIN
  227.  
  228. JUMP: ' Jump to new location on screen.
  229.     GET (3,12)-(320,35),SW: LINE (3,12)-(320,35),0,BF: LINE (3,12)-(320,35),1,B: LINE (5,14)-(318,33),1,B
  230.     LOCATE 3,26: PRINT "Jump Function";
  231.     LOCATE 4,2 : PRINT "Jump from (";
  232.     PRINT USING "###";X;: PRINT ",";: PRINT USING "###";Y;
  233.     PRINT ") to (____,____)";
  234.         BL=48: BU=57: REY=4: REX=26: MAXL=3: GOSUB RECIEVE
  235.         H=VAL(HW$)
  236.         BL=48: BU=57: REY=4: REX=31: MAXL=3: GOSUB RECIEVE
  237.         K=VAL(HW$)
  238.     IF H<0 THEN H=0 ELSE IF H>639 THEN H=639
  239.     IF K<10 THEN K=10 ELSE IF K>199 THEN K=199
  240.     LINE (3,12)-(320,35),0,BF: PUT (3,12),SW,PSET: X=H: Y=K: PSET (X,Y),1
  241.     GOSUB SM4
  242. GOTO MAIN
  243.  
  244. DSAVE: 'Save screen image.
  245.     IF NAMD$="Untitled" THEN GOTO DSPECIAL
  246.     LOCATE 1,1
  247.     PRINT SPC(79);" ";: DEF SEG=&HB800
  248.     V$=MPH$+NAMD$
  249.     BSAVE V$,0,&H4000: V$=""
  250.     LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  251. GOTO MAIN
  252.  
  253. DSPECIAL: 'Get filespec for new screen.
  254.     GET (152,72)-(472,141),SW
  255.     LINE (152,72)-(472,141),0,BF: LINE (152,72)-(472,141),1,B: LINE (154,74)-(470,139),1,B
  256.     LINE (162,92)-(208,115),1,B: LINE (180,94)-(189,108),1,B: LINE (180,110)-(189,113),1,B: PAINT(181,111): PAINT (181,95),1
  257.     LOCATE 11,31: PRINT "The screen is untitled.";
  258.     LOCATE 12,31: PRINT "Disk Drive & Path......";
  259.     BL=22: BU=126: REY=13: REX=31: MAXL=30: GOSUB RECIEVE: IF HW$="" THEN HW$=PTH$
  260.     MPH$=HW$: HW$=""
  261.     LOCATE 14,31: PRINT "Enter filename.........";
  262. DS1: BL=22: BU=126: REY=15: REX=31: MAXL=20: GOSUB RECIEVE
  263.     IF HW$="" THEN LOCATE 15,31: PRINT SPC(20);: GOTO DS1
  264.     IF HW$="CSI.DAT" OR NAMD$="ETCH.DAT" OR NAMD$="SCREEN.DAT" THEN LOCATE 15,31: PRINT SPC(20): GOTO DS1
  265.     NAMD$=HW$
  266.     PUT (152,72),SW,PSET: GOTO DSAVE
  267.  
  268. DLOAD: 'Load screen image.
  269.     DEF SEG=&HB800
  270.     V$=MPH$+NAMD$
  271.     BLOAD V$: V$=""
  272.     GOSUB BORDER
  273.     LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  274. GOTO MAIN
  275.  
  276. RENAME: ' Change default filename.
  277.     NAMD$=""
  278.     GET (3,12)-(320,43),SW
  279.     LINE (3,12)-(320,43),0,BF
  280.     LINE (3,12)-(320,43),1,B
  281.     LINE (5,14)-(318,41),1,B
  282.     LOCATE 3,20: PRINT "New File Function";
  283.     LOCATE 4,2:  PRINT "Disk Drive & Path...";
  284.     BL=22: BU=126: REY=4: REX=24: MAXL=20: GOSUB RECIEVE: IF HW$="" THEN HW$=PTH$
  285.     MPH$=HW$: HW$=""
  286.     LOCATE 5,2:  PRINT "Filespec...";
  287. DE1:    BL=32: BU=126: REY=5: REX=24: MAXL=20: GOSUB RECIEVE
  288.         ZLG$=HW$
  289.     IF ZLG$="" THEN LOCATE 5,16: PRINT SPC(20);: GOTO DE1
  290.     NAMD$=ZLG$
  291.     LINE (3,12)-(320,41),0,BF: PUT (3,12),SW,PSET
  292.     GOSUB SM3
  293. GOTO MAIN
  294.  
  295. PURGE: 'Clear workstation.
  296.     CLS: NAMD$="Untitled": MPH$=PTH$
  297.     GOSUB BORDER
  298.     LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  299. GOTO MAIN
  300.  
  301. NEGA2: ' Reverse the rectangle defined by (x,y)-(h,k)
  302.     GET (3,12)-(344,35),SW: LINE (3,12)-(344,35),0,BF: LINE (3,12)-(344,35),1,B: LINE (5,14)-(342,33),1,B
  303.     LOCATE 3,20 : PRINT "Reverse Image Function";
  304.     LOCATE 4,2: PRINT "Reverse from (";
  305.     PRINT USING "###";X;: PRINT ",";: PRINT USING "###";Y;
  306.     PRINT ") to (____,____)";
  307.         BL=48: BU=57: REY=4: REX=29: MAXL=3: GOSUB RECIEVE
  308.         HB=VAL(HW$)
  309.         BL=48: BU=57: REY=4: REX=34: MAXL=3: GOSUB RECIEVE
  310.         KB=VAL(HW$)
  311.     LINE (3,12)-(344,35),0,BF: PUT (3,12),SW,PSET
  312.     IF HB>639 THEN HB=639 ELSE IF HB<0 THEN HB=0
  313.     IF KB>199 THEN KB=199 ELSE IF KB<10 THEN KB=10
  314.     IF (HB<X AND KB>Y) THEN
  315.             GET(HB,Y)-(X,KB),SX
  316.             LINE (HB,Y)-(X,KB),1,BF
  317.             PUT (HB,Y),SX,XOR
  318.             GOSUB BORDER
  319.         ELSEIF (HB<X AND KB<Y) THEN
  320.             GET(HB,KB)-(X,Y),SX
  321.             LINE (HB,KB)-(X,Y),1,BF
  322.             PUT (HB,KB),SX,XOR
  323.             GOSUB BORDER
  324.         ELSEIF (HB>X AND KB<Y) THEN
  325.             GET(X,KB)-(HB,Y),SX
  326.             LINE (X,KB)-(HB,Y),1,BF
  327.             PUT (X,KB),SX,XOR
  328.             GOSUB BORDER
  329.         ELSEIF (HB>X AND KB>Y) THEN
  330.             GET(X,Y)-(HB,KB),SX
  331.             LINE (X,Y)-(HB,KB),1,BF
  332.             PUT (X,Y),SX,XOR
  333.             GOSUB BORDER
  334.     END IF
  335. GOTO MAIN
  336.  
  337. NEGA1: ' Reverse screen image.
  338.     GET (1,11)-(638,198),SW
  339.     LINE (1,11)-(638,198),1,BF
  340.     PUT (1,11),SW,XOR
  341.     GOSUB BORDER
  342. GOTO MAIN
  343.  
  344.  
  345. BORDER:
  346.     LINE (0,10)-(639,199),1,B
  347. RETURN
  348.  
  349. MOVE: ' Move a rectangle defined by (x,y)-(h,k)
  350.       ' to a rectangle with upper left corner defined at (i,j)
  351.     GET (3,12)-(336,51),SW: LINE (3,12)-(336,51),0,BF
  352.     LINE (3,12)-(336,51),1,B: LINE (4,14)-(334,49),1,B
  353.     LOCATE 3,15: PRINT "Moving Image Function";
  354.     LOCATE 4,2: PRINT "Get from (";: PRINT USING "###";X;
  355.     PRINT ",";: PRINT USING "###";Y;: PRINT ") to (____,____)";
  356. ME1:    BL=48: BU=57: REY=4: REX=25: MAXL=3: GOSUB RECIEVE
  357.         H=VAL(HW$)
  358.         IF H<X THEN GOSUB ILLEGAL: GOTO ME1
  359. ME2:    BL=48: BU=57: REY=4: REX=30: MAXL=3: GOSUB RECIEVE
  360.         K=VAL(HW$)
  361.         IF K<Y THEN GOSUB ILLEGAL: GOTO ME2
  362.     LINE (3,12)-(336,51),O,BF: PUT (3,12),SW,PSET
  363.     GET (X,Y)-(H,K),SW
  364.     LOCATE 1,1: PRINT SPC(79);" ";
  365.     LOCATE 1,1:
  366.     PRINT "Use the cursor keys to move the image.  Press Esc to cancel, Return when done.";
  367.     I=X: J=Y: IB=H-X: JB=K-Y
  368.     GET (I,J)-(I+IB,J+JB),SX
  369.     PUT (I,J),SW,PSET
  370.     MV1: WVZ$=INKEY$
  371.         IF WVZ$="" THEN
  372.             GOTO MV1
  373.         ELSEIF WVZ$=CHR$(13) THEN
  374.             PUT (I,J),SW,PSET
  375.             LINE (0,0)-(639,8),1,BF
  376.             GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  377.             GOTO MAIN
  378.         ELSEIF WVZ$=CHR$(27) THEN
  379.             PUT (I,J),SX,PSET
  380.             LINE (0,0)-(639,8),1,BF
  381.             GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  382.             GOTO MAIN
  383.                 GOTO MV9
  384.         ELSEIF WVZ$="1" THEN
  385.             PUT (I,J),SX,PSET: I=I-10: J=J+5 : GOTO MV9
  386.         ELSEIF WVZ$="2" THEN
  387.             PUT (I,J),SX,PSET: J=J+5 :         GOTO MV9
  388.         ELSEIF WVZ$="3" THEN
  389.             PUT (I,J),SX,PSET: I=I+10: J=J+5 : GOTO MV9
  390.         ELSEIF WVZ$="4" THEN
  391.             PUT (I,J),SX,PSET: I=I-10:         GOTO MV9
  392.         ELSEIF WVZ$="6" THEN
  393.             PUT (I,J),SX,PSET: I=I+10:         GOTO MV9
  394.         ELSEIF WVZ$="7" THEN
  395.             PUT (I,J),SX,PSET: I=I-10: J=J-5 : GOTO MV9
  396.         ELSEIF WVZ$="8" THEN
  397.             PUT (I,J),SX,PSET: J=J-5 :         GOTO MV9
  398.         ELSEIF WVZ$="9" THEN
  399.             PUT (I,J),SX,PSET: I=I+10: J=J-5 : GOTO MV9
  400.         ELSEIF LEN(WVZ$)=2 THEN
  401.             AQ=ASC(RIGHT$(WVZ$,1))
  402.             IF AQ=71 THEN
  403.                 PUT (I,J),SX,PSET
  404.                 I=I-1: J=J-1
  405.                 GOTO MV9
  406.             ELSEIF AQ=72 THEN
  407.                 PUT (I,J),SX,PSET
  408.                 J=J-1
  409.                 GOTO MV9
  410.             ELSEIF AQ=73 THEN
  411.                 PUT (I,J),SX,PSET
  412.                 I=I+1: J=J-1
  413.                 GOTO MV9
  414.             ELSEIF AQ=75 THEN
  415.                 PUT (I,J),SX,PSET
  416.                 I=I-1
  417.                 GOTO MV9
  418.             ELSEIF AQ=77 THEN
  419.                 PUT (I,J),SX,PSET
  420.                 I=I+1
  421.                 GOTO MV9
  422.             ELSEIF AQ=79 THEN
  423.                 PUT (I,J),SX,PSET
  424.                 I=I-1: J=J+1
  425.                 GOTO MV9
  426.             ELSEIF AQ=80 THEN
  427.                 PUT (I,J),SX,PSET
  428.                 J=J+1
  429.                 GOTO MV9
  430.             ELSEIF AQ=81 THEN
  431.                 PUT (I,J),SX,PSET
  432.                 I=I+1: J=J+1
  433.                 GOTO MV9
  434.             ELSE GOTO MV1
  435.             END IF
  436.         END IF
  437.         GOTO MV1
  438. MV9: IF I<1 THEN I=(639-(H-X+1)) ELSE IF I+(H-X+1)>639 THEN I=1
  439.     IF J<11 THEN J=(199-(K-Y+1)) ELSE IF J+(K-Y+1)>199 THEN J=11
  440.     GET (I,J)-(I+IB,J+JB),SX
  441.     PUT (I,J),SW,PSET: GOTO MV1
  442.  
  443. CSTEP: ' Change interval of x and y movement.
  444.     GET (3,12)-(336,51),SW: LINE (3,12)-(336,51),0,BF
  445.     LINE (3,12)-(336,51),1,B: LINE (5,14)-(334,49),1,B
  446.     LOCATE 3,20: PRINT "Step Function";
  447.     LOCATE 4,2:  PRINT "Change X step from ";
  448.     PRINT USING "###";OX;: PRINT " to..";
  449.         BL=46: BU=57: REY=4: REX=30: MAXL=3: GOSUB RECIEVE
  450.         Q$=HW$
  451.     IF Q$="" THEN OX=OX ELSE OX=VAL(Q$)
  452.     LOCATE 5,2:  PRINT "Change Y Step from ";
  453.     PRINT USING "###";OY;: PRINT " to..";
  454.         BL=46: BU=57: REY=5: REX=30: MAXL=3: GOSUB RECIEVE
  455.         Q$=HW$
  456.     IF Q$="" THEN OY=OY ELSE OY=VAL(Q$)
  457.     LINE (3,12)-(336,51),0,BF: PUT (3,12),SW
  458.     GOSUB SM1
  459. GOTO MAIN
  460.  
  461. TEXT: ' Enter text mode.
  462.     INK=8
  463.     LINE (0,0)-(8,7),1,BF
  464.     GET (0,0)-(8,7),CZ : ' CURSOR CHARACTER
  465.     LOCATE 1,1: PRINT SPC(2);: LOCATE 1,30: PRINT "Text  Mode";: PUT (232,0),Q1,XOR
  466.     PUT (PZ,PY),CZ
  467.     T1: Q$=INKEY$
  468.         IF Q$="" THEN
  469.                 GOTO T1
  470.             ELSEIF ASC(Q$)=8 THEN
  471.                 GOTO T1
  472.             ELSEIF Q$=CHR$(27) THEN
  473.                 PUT (PZ,PY),CZ
  474.                 LINE (0,0)-(639,8),1,BF
  475.                 GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  476.                 GOTO MAIN
  477.         END IF
  478.         IF Q$=CHR$(13) THEN
  479.             IF INK=8 THEN
  480.                     INK=1
  481.                     GOTO T1
  482.                 ELSE INK=8: GOTO T1
  483.             END IF
  484.         END IF
  485.         IF LEN (Q$)=2 THEN GOTO T2 ELSE GOTO T4
  486.         T2: AQ=ASC(RIGHT$(Q$,1))
  487.         T3: Q$=""
  488.         GZ=PZ: GY=PY
  489.         IF AQ=71 THEN
  490.             PZ=INT((PZ)/8)*8+7
  491.             TZ=INT((TZ)/8)*8+7
  492.             PY=INT((PY)/8)*8
  493.             TY=INT((TY)/8)*8
  494.         END IF
  495.         IF (AQ=77 AND PLO=1) THEN
  496.                 PZ=PZ+8
  497.                 TZ=TZ+8
  498.             ELSEIF AQ=77 THEN
  499.                 PZ=PZ+INK
  500.                 TZ=TZ+INK
  501.         END IF
  502.         IF AQ=75 THEN
  503.             PZ=PZ-INK
  504.             TZ=TZ-INK
  505.         END IF
  506.         IF AQ=72 THEN
  507.             PY=PY-INK
  508.             TY=TY-INK
  509.         END IF
  510.         IF AQ=80 THEN
  511.             PY=PY+INK
  512.             TY=TY+INK
  513.         END IF
  514.         IF PZ<7 THEN
  515.                 PZ=623
  516.                 PY=PY-INK
  517.             ELSEIF PZ>623 THEN
  518.                 PZ=7
  519.                 PY=PY+INK
  520.         END IF
  521.         IF TZ<7 THEN
  522.                 TZ=623
  523.                 TY=TY-INK
  524.             ELSEIF TZ>623 THEN
  525.                 TZ=7
  526.                 TY=TY+INK
  527.         END IF
  528.         IF PY<16 THEN
  529.                 PY=184
  530.             ELSEIF PY>184 THEN
  531.                 PY=16
  532.         END IF
  533.         IF TY<16 THEN
  534.                 TY=184
  535.             ELSEIF TY>184 THEN
  536.                 TY=16
  537.         END IF
  538.         PUT (GZ,GY),CZ
  539.         IF PLO=1 THEN
  540.             PLO=0
  541.             PUT (GZ,GY),CA
  542.         END IF
  543.         PUT (PZ,PY),CZ
  544.     GOTO T1
  545.     T4: LOCATE 1,1: PRINT Q$;
  546.         GET (0,0)-(8,7),CA
  547.         LOCATE 1,1: PRINT SPC(1);
  548.         PLO=1: AQ=77
  549.     GOTO T3
  550.  
  551. KLINE: '  Clear command line, and set printer for screen dump.
  552.     LPRINT CHR$(27)+"A"+CHR$(8);
  553.     IF YARBLOCKO=2 THEN LPRINT CHR$(27)+"2"
  554.     LOCATE 1,1: PRINT SPC(79);" ";
  555.     FOR G=1 TO 5000: NEXT G
  556.     LINE (0,0)-(639,8),1,BF
  557.     GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  558. GOTO MAIN
  559.  
  560. ILLEGAL: ' Illegal input response.
  561.     BEEP
  562.     LOCATE 1,1: PRINT "Illegal Co-ordinates.";
  563.     BEEP
  564.     I1: BVD$=INKEY$: IF BVD$<>CHR$(27) THEN GOTO I1
  565.     LOCATE 1,1: PRINT "                     ";
  566.     LINE (0,0)-(639,8),1,BF
  567.     GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  568. RETURN
  569.  
  570. BOX: ' Draw a rectangle defined by (x,y)-(h,k) in either black or white,               either filled or empty.
  571.     GET (3,12)-(384,75),SW: LINE (3,12)-(384,75),0,BF
  572.     LINE (3,12)-(384,75),1,B: LINE (5,14)-(382,73),1,B
  573.     LOCATE 3,26 : PRINT "Box Function";
  574.     LOCATE 4,2  : PRINT "Box defined from (";
  575.     PRINT USING "###";X;: PRINT ",";: PRINT USING "###";Y;
  576.     PRINT ") to (____,____)";
  577.         BL=48: BU=57: REY=4: REX=33: MAXL=3: GOSUB RECIEVE
  578.         H=VAL(HW$)
  579.         BL=48: BU=57: REY=4: REX=38: MAXL=3: GOSUB RECIEVE
  580.         K=VAL(HW$)
  581.     IF H<0 THEN H=0 ELSE IF H>639 THEN H=639
  582.     IF K<10 THEN K=10 ELSE IF K>199 THEN K=199
  583.     LOCATE 5,2  : PRINT "Colour of outline.(Black=0, White=1)..";
  584.         BL=48: BU=49: REY=5: REX=41: MAXL=1: GOSUB RECIEVE
  585.         CD=VAL(HW$)
  586.     BX1:  LOCATE 6,2: PRINT SPC(40);
  587.         LOCATE 6,2  : PRINT "Fill box (Y/N)........................";
  588.             BL=65: BU=122: REY=6: REX=41: MAXL=1: GOSUB RECIEVE
  589.             WVZ$=HW$
  590.         IF (WVZ$="N" OR WVZ$="n") THEN GOTO BO1 ELSE IF (WVZ$="Y" OR WVZ$="y") THEN GOTO BO1 ELSE GOTO BX1
  591.     BO1: LOCATE 9,2  : PRINT "Esc to Cancel.       Return to Go.";
  592.     BX2: ET$=INKEY$: IF ET$="" THEN GOTO BX2
  593.     IF ET$=CHR$(27) THEN
  594.         LINE (3,12)-(384,75),0,BF
  595.         PUT (3,12),SW,PSET
  596.         GOTO MAIN
  597.     END IF
  598.     IF (ET$=CHR$(13) AND (WVZ$="N" OR WVZ$="n")) THEN LINE (3,12)-(384,75),0,BF: PUT (3,12),SW,PSET: LINE (X,Y)-(H,K),CD,B: GOTO MAIN
  599.     IF (ET$=CHR$(13) AND (WVZ$="Y" OR WVZ$="y")) THEN LINE (3,12)-(384,75),0,BF: PUT (3,12),SW,PSET: LINE (X,Y)-(H,K),CD,BF: GOTO MAIN
  600.  
  601. HELP: ' Help Window.  Pop-up Command One.
  602.     NS=14
  603.     GET (3,12)-(335,166),SW
  604.     LINE (3,12)-(335,166),0,BF
  605.     LINE (3,12)-(335,166),1,B
  606.     LINE (5,14)-(333,164),1,B
  607.     XS=1
  608.     GOSUB ONE
  609.     LOOPHELP:
  610.     L2: QU$=INKEY$: IF QU$="" THEN GOTO L2
  611.     IF ASC(RIGHT$(QU$,1))=73 THEN
  612.             XS=XS-1
  613.         ELSEIF ASC(RIGHT$(QU$,1))=81 THEN
  614.             XS=XS+1
  615.     ELSEIF QU$=CHR$(27) THEN
  616.             LINE (3,12)-(335,166),0,BF
  617.             PUT (3,12),SW,PSET
  618.             GOTO MAIN
  619.     ELSEIF QU$=CHR$(14) THEN
  620.             LINE (3,12)-(335,166),0,BF
  621.             PUT (3,12),SW,PSET
  622.             GOTO CLOCK
  623.     ELSEIF QU$=CHR$(15) THEN
  624.             LINE (3,12)-(335,166),0,BF
  625.             PUT (3,12),SW,PSET
  626.             GOTO DISKDIR
  627.     ELSEIF QU$=CHR$(16) THEN
  628.             LINE (3,12)-(335,166),0,BF
  629.             PUT (3,12),SW,PSET
  630.             GOTO CALC
  631.     ELSEIF QU$=CHR$(17) THEN
  632.             LINE (3,12)-(335,166),0,BF
  633.             PUT (3,12),SW,PSET
  634.             GOTO HEADLINE
  635.     END IF
  636.     L3:
  637.     IF XS<1 THEN
  638.             XS=1
  639.             GOTO LOOPHELP
  640.         ELSEIF XS>NS THEN
  641.             XS=NS
  642.             GOTO LOOPHELP
  643.     END IF
  644.     ON XS GOSUB ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,_
  645.     ELEVEN,TWELVE,THIRTEEN,FOURTEEN
  646.     GOTO LOOPHELP
  647.  
  648. ONE:
  649.     LINE (6,15)-(332,163),0,BF
  650.     LINE (5,14)-(333,22),0,BF: LINE (5,14)-(333,25),1,B: PAINT (6,15),CHR$(170)+CHR$(85)
  651.     LOCATE 3,14: PRINT " User Commands ";
  652.     LOCATE 5,3:  PRINT "        F1...Call up help screen.";
  653.     LOCATE 7,3:  PRINT "        B....Draw a rectangle defined  ";
  654.     LOCATE 8,3:  PRINT "        by (X,Y)-(H,K) as corners      ";
  655.     LOCATE 10,3: PRINT "        C....Draw a circle at (X,Y).   ";
  656.     LOCATE 11,3: PRINT "         Give Radius, Color, X:Y Ratio.";
  657.     LOCATE 13,3: PRINT "        D....Enter `Draw' Mode.        ";
  658.     LOCATE 15,3: PRINT "        E....Enter `Erase' Mode.       ";
  659.     LOCATE 17,3: PRINT "        F....Fill the area around the  ";
  660.     LOCATE 18,3: PRINT "        co-ordinates (X,Y) with white. ";
  661.     LOCATE 20,3: PRINT "Press PgDn for more.       Esc to exit.";
  662. RETURN
  663.  
  664. TWO:
  665.     LINE (6,15)-(332,163),0,BF
  666.     LOCATE 3,3:  PRINT "Shift - F....Fill the area around the  ";
  667.     LOCATE 4,3:  PRINT "        co-ordinates (X,Y) with tiles. ";
  668.     LOCATE 6,3:  PRINT "Shift - G....Get a rectangle defined by";
  669.     LOCATE 7,3:  PRINT "        (X,Y)-(H,K) and put it at (I,J)";
  670.     LOCATE 9,3:  PRINT "        H....Return cursor to (320,100)";
  671.     LOCATE 11,3: PRINT "        J....Jump to co-ordinates (H,K)";
  672.     LOCATE 13,3: PRINT "        K....Clear screen.             ";
  673.     LOCATE 15,3: PRINT "        L....Draw a line from (X,Y) to ";
  674.     LOCATE 16,3: PRINT "        (H,K) in either black or white.";
  675.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit.";
  676. RETURN
  677.  
  678. THREE:
  679.     LINE (6,15)-(332,163),0,BF
  680.     LOCATE 3,3:  PRINT "        M....Magnification Function.   ";
  681.     LOCATE 5,3:  PRINT "        N....Rename screen filename.   ";
  682.     LOCATE 7,3:  PRINT "        O....Other Cursor.             ";
  683.     LOCATE 9,3:  PRINT "Shift - P....Small screen dump.        ";
  684.     LOCATE 10,3: PRINT "        P....Large screen dump.        ";
  685.     LOCATE 11,3: PRINT "        (Command line will be erased.) ";
  686.     LOCATE 13,3: PRINT "Shift - Q....Change X and Y step of the";
  687.     LOCATE 14,3: PRINT "        cursor.                        ";
  688.     LOCATE 16,3: PRINT "        R....Restore screen from disk. ";
  689.     LOCATE 17,3: PRINT "        S....Save screen to disk.      ";
  690.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit.";
  691. RETURN
  692.  
  693. FOUR:
  694.     LINE (6,15)-(332,163),0,BF
  695.     LINE (10,100)-(328,100),1
  696.     LOCATE 3,3:  PRINT "Shift - T....Enter Text Mode.          ";
  697.     LOCATE 4,3:  PRINT "Text Mode Commands:                    ";
  698.     LOCATE 6,3:  PRINT "      Return.Toggle between regular    ";
  699.     LOCATE 7,3:  PRINT "      cursor movement and fine moving. ";
  700.     LOCATE 9,3:  PRINT "      Home...Move cursor to nearest    ";
  701.     LOCATE 10,3: PRINT "      regular cursor location.         ";
  702.     LOCATE 12,3: PRINT "      Esc....Re-enter graphics mode.   ";
  703.     LOCATE 14,3: PRINT "        X....Reverse entire image.     ";
  704.     LOCATE 16,3: PRINT "Shift - X....Reverse rectangle defined ";
  705.     LOCATE 17,3: PRINT "        by (X,Y)-(H,K).                ";
  706.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit.";
  707. RETURN
  708.  
  709. FIVE:
  710.     LINE (6,15)-(332,163),0,BF
  711.     LOCATE 3,3:  PRINT "/.......Remove top command line for  ";
  712.     LOCATE 4,3:  PRINT "        printing the screen.           ";
  713.     LOCATE 5,3:  PRINT "+...-...Select font file number.       ";
  714.     LOCATE 7,3:  PRINT "To print the screen using the PrtSc key";
  715.     LOCATE 8,3:  PRINT "do the following:                      ";
  716.     LOCATE 10,3:  PRINT "For a LARGE printout, press the left   ";
  717.     LOCATE 11,3: PRINT "Shift key and the PrtSc key together.  ";
  718.     LOCATE 13,3: PRINT "For a SMALL printout, press the right  ";
  719.     LOCATE 14,3: PRINT "Shift key and the PrtSc key together.  ";
  720.     LOCATE 16,3: PRINT "Note: The `/' command only removes the ";
  721.     LOCATE 17,3: PRINT "command line for 10 seconds.  This is  ";
  722.     LOCATE 18,3: PRINT "for use with the PrtSc key commands.   ";
  723.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit.";
  724. RETURN
  725.  
  726. SIX:
  727.     LINE (6,15)-(332,163),0,BF
  728.     LOCATE 3,15: PRINT"Cursor Controls:";
  729.     LOCATE 5,3:  PRINT"Home              Up              PgUp ";
  730.     LOCATE 6,3:  PRINT"                                       ";
  731.     LOCATE 7,3:  PRINT"                                       ";
  732.     LOCATE 8,3:  PRINT"Left                              Right";
  733.     LOCATE 9,3:  PRINT"                                       ";
  734.     LOCATE 10,3: PRINT"                                       ";
  735.     LOCATE 11,3: PRINT"End              Down             PgDn ";
  736.     LOCATE 13,3: PRINT"Seven            Eight            Nine ";
  737.     LOCATE 14,3: PRINT"                                       ";
  738.     LOCATE 15,3: PRINT"                                       ";
  739.     LOCATE 16,3: PRINT"Four                               Six ";
  740.     LOCATE 17,3: PRINT"                                       ";
  741.     LOCATE 18,3: PRINT"                                       ";
  742.     LOCATE 19,3: PRINT"One               Two            Three ";
  743.     LOCATE 20,3: PRINT"Press PgDn/PgUp for more.  Esc to exit.";
  744.     LINE (168,43)-(168,77),1: LINE (168,107)-(168,141),1,,&HFF00
  745.     LINE (60,60)-(275,60),1:  LINE (60,124)-(275,124),1,,&HFF00
  746.     LINE (60,77)-(275,43),1:  LINE (60,141)-(275,107),1,,&HFF00
  747.     LINE (60,43)-(275,77),1:  LINE (60,107)-(275,141),1,,&HFF00
  748. RETURN
  749.  
  750. SEVEN:
  751.     LINE (6,15)-(332,163),0,BF
  752.     LOCATE 3,15: PRINT "Additional Functions:";
  753.     LOCATE 5,3 : PRINT "F2.....Pop-up Clock.";
  754.     LOCATE 6,3 : PRINT "F3.....List files in a specified";
  755.     LOCATE 7,3 : PRINT "       disk drive directory.";
  756.     LOCATE 8,3: PRINT  "F4.....Calculator Function.  ";
  757.     LOCATE 9,3: PRINT  "F5.....Headline/Marquee.     ";
  758.     LOCATE 10,3: PRINT "       Display a headline in the";
  759.     LOCATE 11,3: PRINT "       defined rectangle.";
  760.     LOCATE 12,3: PRINT "F6.....Extract symbol from font.";
  761.     LOCATE 13,3: PRINT "F10....Fast Exit, stage right.";
  762.     LOCATE 15,3: PRINT "\......Display Command Line Menu.":
  763.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit";
  764. RETURN
  765.  
  766. EIGHT:
  767.     LINE (6,15)-(332,163),0,BF
  768.     LOCATE 3,15: PRINT "Using Text Mode:";
  769.     LOCATE 5,3:  PRINT "The text mode allows you to place text ";
  770.     LOCATE 6,3:  PRINT "anywhere within the screen borders. But";
  771.     LOCATE 7,3:  PRINT "in order to use graphics again, you    ";
  772.     LOCATE 8,3:  PRINT "exit the text mode.  In the text mode  ";
  773.     LOCATE 9,3:  PRINT "the cursor is originally located on the";
  774.     LOCATE 10,3: PRINT "regular IBM 80 X 25 grid. Using the Esc";
  775.     LOCATE 11,3: PRINT "key to enter the fine cursor movement ";
  776.     LOCATE 12,3: PRINT "mode, you can place the cursor between";
  777.     LOCATE 13,3: PRINT "lines for either exponential or base  ";
  778.     LOCATE 14,3: PRINT "notation.  Pressing the Home key will ";
  779.     LOCATE 15,3: PRINT "put the cursor on the nearest IBM grid";
  780.     LOCATE 16,3: PRINT "location.  In order to delete letters,";
  781.     LOCATE 17,3: PRINT "you must position the cursor on top of";
  782.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit";
  783. RETURN
  784.  
  785. NINE:
  786.     LINE (6,15)-(332,163),0,BF
  787.     LOCATE 3,3:  PRINT "the letter exactly, and re-enter the  ";
  788.     LOCATE 4,3:  PRINT "character.  The space bar key has the ";
  789.     LOCATE 5,3:  PRINT "same effect as the right cursor key,  ";
  790.     LOCATE 6,3:  PRINT "in that it will move the cursor one   ";
  791.     LOCATE 7,3:  PRINT "character space on either the IBM grid";
  792.     LOCATE 8,3:  PRINT "or the non-standard grid, but will not";
  793.     LOCATE 9,3:  PRINT "erase text or graphics.               ";
  794.     LOCATE 11,3: PRINT "The backspace key has been turned off.";
  795.     LOCATE 12,3: PRINT "To backspace, use the left cursor key.";
  796.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit";
  797. RETURN
  798.  
  799. TEN:
  800.     LINE (6,15)-(332,163),0,BF
  801.     LOCATE 3,3: PRINT "   F6....Preset & User-defined fonts.  ";
  802.     LOCATE 5,3: PRINT "ETCH CGA comes with with three preset";
  803.     LOCATE 6,3: PRINT "fonts stored in the files FONT1.DAT,   ";
  804.     LOCATE 7,3: PRINT "FONT2.DAT, & FONT3.DAT.  However, it is";
  805.     LOCATE 8,3: PRINT "to create your own fonts which can be";
  806.     LOCATE 9,3: PRINT "used with the F6 Icon command.  To do";
  807.     LOCATE 10,3: PRINT"this, load the file FONTX.DAT when";
  808.     LOCATE 11,3: PRINT"using ETCH CGA.  This file is a";
  809.     LOCATE 12,3: PRINT"template for creating fonts.  Draw any";
  810.     LOCATE 13,3: PRINT"symbol within the dotted lines, then";
  811.     LOCATE 14,3: PRINT"erase the lines.  Then, save the screen";
  812.     LOCATE 15,3: PRINT"with a filename with the syntax";
  813.     LOCATE 16,3: PRINT"FONT#.DAT, where # is an integer";
  814.     LOCATE 17,3: PRINT"between 4 and 9 inclusive.  Then use";
  815.     LOCATE 18,3: PRINT"SETUP.EXE to set the number of user-";
  816.     LOCATE 19,3: PRINT"defined fonts created.";
  817.     LOCATE 20,3: PRINT"Press PgDn/PgUp for more.  Esc to exit.";
  818. RETURN
  819.  
  820. ELEVEN:
  821.     LINE (6,15)-(332,163),0,BF
  822.     LOCATE 3,15: PRINT "Default Settings:";
  823.     LOCATE 5,3:  PRINT "The following functions incorporate   ";
  824.     LOCATE 6,3:  PRINT "default values for a carriage return. ";
  825.     LOCATE 8,3:  PRINT "Circle..Ratio:           .42        ";
  826.     LOCATE 9,3:  PRINT "        Color:          1           ";
  827.     LOCATE 10,3: PRINT "        Degree Start:   0           ";
  828.     LOCATE 11,3: PRINT "        Degree End:   360           ";
  829.     LOCATE 13,3: PRINT "Name, Store, Restore";
  830.     LOCATE 14,3: PRINT "        The initial filespec for these";
  831.     LOCATE 15,3: PRINT "        functions is Untitled. The file";
  832.     LOCATE 16,3: PRINT "        name is displayed on the";
  833.     LOCATE 17,3: PRINT "        top line of the screen.";
  834.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit";
  835. RETURN
  836.  
  837. TWELVE:
  838.     LINE (6,15)-(332,163),0,BF
  839.     LOCATE 3,3:  PRINT "Step....The X,Y steps are initially";
  840.     LOCATE 4,3:  PRINT "        set to 1.  A carriage return";
  841.     LOCATE 5,3:  PRINT "        for either step will result ";
  842.     LOCATE 6,3:  PRINT "        in an unchanged step.       ";
  843.     LOCATE 8,3:  PRINT "Etch CGA is by Charles Milner.        ";
  844.     LOCATE 9,3:  PRINT "Ver. 2.1       6650 Sperling Avenue.  ";
  845.     LOCATE 10,3: PRINT "               Burnaby, B.C.          ";
  846.     LOCATE 11,3: PRINT "               V5E 2V7                ";
  847.     LOCATE 13,3: PRINT "       Copyright  [c] 1986 CSI.       ";
  848.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit";
  849. RETURN
  850.  
  851. THIRTEEN:
  852.     LINE (6,15)-(332,163),0,BF
  853.     LOCATE 3,3:  PRINT "       Programme Registration          ";
  854.     LOCATE 5,3:  PRINT "This programme is distributed using the";
  855.     LOCATE 6,3:  PRINT "SHAREWARE system.  Feel free to give   ";
  856.     LOCATE 7,3:  PRINT "unaltered copies of this programme to";
  857.     LOCATE 8,3:  PRINT "anyone,  provided this message remains.";
  858.     LOCATE 10,3: PRINT "If you like this programme, send $5.00 ";
  859.     LOCATE 11,3: PRINT "+ $2.00 S&H. to register your copy.  If";
  860.     LOCATE 12,3: PRINT "you include a 360K diskette, the latest";
  861.     LOCATE 13,3: PRINT "version will be shipped to you
  862.     LOCATE 14,3: PRINT "immediately.";
  863.     LOCATE 16,3: PRINT "Please note: The only obligation to";
  864.     LOCATE 17,3: PRINT "send any money is if you are happy with";
  865.     LOCATE 18,3: PRINT "the product.      - Chuck -";
  866.     LOCATE 20,3: PRINT "Press PgDn/PgUp for more.  Esc to exit.";
  867. RETURN
  868.  
  869. FOURTEEN:
  870.     LINE (6,15)-(332,163),0,BF
  871.     LOCATE 3,3:  PRINT "           Ideas & Errors              ";
  872.     LOCATE 5,3:  PRINT "If you locate an error in this product,";
  873.     LOCATE 6,3:  PRINT "then send me a note, indicating how you";
  874.     LOCATE 7,3:  PRINT "found it, etc.  This results in better ";
  875.     LOCATE 8,3:  PRINT "upgrades.                              ";
  876.     LOCATE 10,3:  PRINT "Any ideas on added features are always ";
  877.     LOCATE 11,3: PRINT "welcomed.  Send in your idea, or coded ";
  878.     LOCATE 12,3: PRINT "subroutine.  If I use your idea, I will";
  879.     LOCATE 13,3: PRINT "acknowledge this in the credits.  The";
  880.     LOCATE 14,3: PRINT "chances of actually getting cash are";
  881.     LOCATE 15,3: PRINT "pretty slim, though.";
  882.     LOCATE 17,3: PRINT "                  - Chuck -";
  883.     LOCATE 19,3: PRINT "Press PgUp for more.";
  884.     LOCATE 20,3: PRINT "                           Esc to exit.";
  885. RETURN
  886.  
  887.  
  888.  
  889. CLOCK: ' Analog Style Clock Based On Internal Time.  Pop-up Command Two.
  890.     GET (399,12)-(636,130),SW
  891.     LINE (399,12)-(636,130),0,BF
  892.     LINE (399,12)-(636,130),1,B
  893.     LINE (401,14)-(634,128),1,BF
  894.     LINE (401,119)-(634,128),0,BF
  895.     LINE (401,119)-(634,128),1,B
  896.     PAINT (402,121),CHR$(170)+CHR$(85)
  897.     CH=518: CK=68
  898.     PI=3.1415927#
  899.     FOR N=0 TO 2*PI STEP(2*PI/12)
  900.         JX=SIN(N)*105+CH
  901.         JY=COS(N)*105*.42+CK
  902.         CIRCLE (JX,JY),3,0,,,.42
  903.     NEXT N
  904.     FOR N=0 TO 2*PI STEP (2*PI/60)
  905.         JX=SIN(N)*105+CH
  906.         JY=COS(N)*105*.42+CK
  907.         PSET (JX,JY),0
  908.     NEXT N
  909.     IP=(2*PI/60)
  910.     GOSUB HOUR: GOSUB MINUTE: GOSUB SECOND
  911.     CL1: QRF$=TIME$
  912.     CL2: QRG$=TIME$: HC=0
  913.         IF VAL(RIGHT$(QRF$,2))<VAL(RIGHT$(QRG$,2)) THEN
  914.             GOSUB SECOND
  915.             HC=1
  916.         ELSEIF (VAL(RIGHT$(QRG$,2))=0 AND VAL(RIGHT$(QRF$,2))=59) THEN
  917.             GOSUB SECOND
  918.             HC=1
  919.         END IF
  920.         IF VAL(MID$(QRF$,4,2))<VAL(MID$(QRG$,4,2)) THEN
  921.             GOSUB MINUTE
  922.             HC=1
  923.         ELSEIF (VAL(MID$(QRG$,4,2))=0 AND VAL(MID$(QRF$,4,2))=59) THEN
  924.             GOSUB MINUTE
  925.             HC=1
  926.         END IF
  927.         PT$=MID$(QRG$,4,2)
  928.         IF RIGHT$(QRG$,2)="00" THEN
  929.             IF (VAL(PT$)/12=INT(VAL(PT$)/12)) THEN
  930.                 GOSUB HOUR
  931.             END IF
  932.         END IF
  933.         QU$=INKEY$
  934.         IF QU$=CHR$(127) THEN
  935.             LINE (399,12)-(636,130),0,BF
  936.             PUT (399,12),SW
  937.             GOTO HELP
  938.         ELSEIF QU$=CHR$(27) THEN
  939.             LINE (399,12)-(636,130),0,BF
  940.             PUT (399,12),SW
  941.             GOTO MAIN
  942.         ELSEIF QU$=CHR$(15) THEN
  943.             LINE (399,12)-(636,130),0,BF
  944.             PUT (399,12),SW
  945.             GOTO DISKDIR
  946.         ELSEIF QU$=CHR$(16) THEN
  947.             LINE (399,12)-(636,130),0,BF
  948.             PUT (399,12),SW
  949.             GOTO CALC
  950.         ELSEIF QU$=CHR$(17) THEN
  951.             LINE (399,12)-(636,130),0,BF
  952.             PUT (399,12),SW
  953.             GOTO HEADLINE
  954.         ELSEIF HC=1 THEN
  955.             GOTO CL1
  956.         ELSE GOTO CL2
  957.         END IF
  958.     SECOND:
  959.         PSET (CH,CK),(1-POINT(CH,CK))
  960.         S=VAL(RIGHT$(TIME$,2))
  961.         LOCATE 16,62: PRINT TIME$
  962.         SEC=-(S)*(IP)+PI
  963.         SEC2=SEC+(IP)
  964.         JX=SIN(SEC)*98+CH:      JY=COS(SEC)*41.16+CK
  965.         JX2=SIN(SEC2)*98+CH:    JY2=COS(SEC2)*41.16+CK
  966.         JX3=SIN(SEC)*5+CH:      JY3=COS(SEC)*2.1+CK
  967.         JX4=SIN(SEC2)*5+CH:     JY4=COS(SEC2)*2.1+CK
  968.         LINE (JX4,JY4)-(JX2,JY2),1
  969.         LINE (JX3,JY3)-(JX,JY),0
  970.         LINE (MX3,MY3)-(MX,MY),0
  971.         LINE (HX3,HY3)-(HX,HY),0
  972.     RETURN
  973.     MINUTE:
  974.         M=VAL(MID$(TIME$,4,2))
  975.         MIN=-(M)*(IP)+PI
  976.         MIN2=MIN+(IP)
  977.         MX=SIN(MIN)*86+CH:      MY=COS(MIN)*36.12+CK
  978.         MX2=SIN(MIN2)*86+CH:    MY2=COS(MIN2)*36.12+CK
  979.         MX3=SIN(MIN)*5+CH:      MY3=COS(MIN)*2.1+CK
  980.         MX4=SIN(MIN2)*5+CH:     MY4=COS(MIN2)*2.1+CK
  981.         LINE (MX4,MY4)-(MX2,MY2),1
  982.         LINE (MX3,MY3)-(MX,MY),0
  983.         LINE (HX3,HY3)-(HX,HY),0
  984.     RETURN
  985.     HOUR:
  986.         H=VAL(LEFT$(TIME$,2))
  987.         HOU=-(H)*5*(IP)+PI
  988.         HOU=HOU-(INT(((VAL(MID$(TIME$,4,2)))/12))*(IP)): HOU2=HOU+(IP)
  989.         HX=SIN(HOU)*64+CH:      HY=COS(HOU)*26.88+CK
  990.         HX2=SIN(HOU2)*64+CH:    HY2=COS(HOU2)*26.88+CK
  991.         HX3=SIN(HOU)*5+CH:      HY3=COS(HOU)*2.1+CK
  992.         HX4=SIN(HOU2)*5+CH:     HY4=COS(HOU2)*2.1+CK
  993.         LINE (HX4,HY4)-(HX2,HY2),1
  994.         LINE (HX3,HY3)-(HX,HY),0
  995.     RETURN
  996.  
  997. DISKDIR: ' Pop-up Command f3. - List disk directory.
  998.      ' Using FILES command.
  999.     GET (0,12)-(636,102),SW
  1000.     LINE (0,12)-(636,102),0,BF
  1001.     LINE (0,12)-(636,102),1,B
  1002.     LINE (0,14)-(634,100),1,B
  1003.     LOCATE 3,20: PRINT "Disk Directory Function.";
  1004.     DD1:
  1005.     LOCATE 4,2:  PRINT "Enter drive letter......";
  1006.         BL=65: BU=122: REY=4: REX=27: MAXL=1: GOSUB RECIEVE
  1007.         DF$=HW$
  1008.     IF ASC(DF$)<65 OR ASC(DF$)>72 THEN GOTO DD2 ELSE GOTO DD3
  1009.     DD2: IF ASC(DF$)<97 OR ASC(DF$)>104 THEN LOCATE 4,2: PRINT SPC(60);: GOTO DD1
  1010.     DD3:
  1011.     LOCATE 4,2: PRINT SPC(60);
  1012.     LOCATE 4,2: PRINT"Enter wildcard...";
  1013.         BL=33: BU=122: REY=4: REX=20: MAXL=12: GOSUB RECIEVE
  1014.         DP$=HW$
  1015.     SPW$=DF$+":\"+DP$
  1016.     LOCATE 4,2: PRINT SPC(60);
  1017.     LOCATE 4,2: PRINT SPW$;
  1018.     FILES SPW$: LINE (0,12)-(0,102),1
  1019.     LOCATE 12,2: PRINT "Press Esc to continue...";
  1020.     DD4: WVZ$=INKEY$: IF WVZ$="" THEN GOTO DD4
  1021.         IF WVZ$=CHR$(27) THEN
  1022.                 LINE (0,12)-(636,102),0,BF
  1023.                 PUT (0,12),SW,PSET
  1024.                 GOTO MAIN
  1025.             ELSEIF WVZ$=CHR$(14) THEN
  1026.                 LINE (0,12)-(636,102),0,BF
  1027.                 PUT (0,12),SW,PSET
  1028.                 GOTO CLOCK
  1029.             ELSEIF WVZ$=CHR$(127) THEN
  1030.                 LINE (0,12)-(636,102),0,BF
  1031.                 PUT (0,12),SW,PSET
  1032.                 GOTO HELP
  1033.             ELSEIF WVZ$=CHR$(16) THEN
  1034.                 LINE (0,12)-(636,102),0,BF
  1035.                 PUT (0,12),SW,PSET
  1036.                 GOTO CALC
  1037.             ELSEIF WVZ$=CHR$(17) THEN
  1038.                 LINE (0,12)-(636,102),0,BF
  1039.                 PUT (0,12),SW,PSET
  1040.                 GOTO HEADLINE
  1041.             ELSE GOTO DD4
  1042.         END IF
  1043.  
  1044. CURSOR: ' Change size of cursor.
  1045.     GET (3,12)-(320,59),SW
  1046.     LINE (3,12)-(320,59),0,BF
  1047.     LINE (3,12)-(320,59),1,B
  1048.     LINE (5,14)-(318,57),1,B
  1049.     LOCATE 3,20: PRINT "Cursor Function.";
  1050.     LOCATE 4,2: PRINT  "Change cursor from:";
  1051.     LOCATE 5,2: PRINT USING "##";1+LM;
  1052.     PRINT " X ";: PRINT USING "##";1+MN;: PRINT " to.. ___ X ___.";
  1053.         BL=48: BU=57: REY=5: REX=15: MAXL=2: GOSUB RECIEVE
  1054.         LC=VAL(HW$)
  1055.         BL=48: BU=57: REY=5: REX=21: MAXL=2: GOSUB RECIEVE
  1056.         WC=VAL(HW$)
  1057.     IF LC<1 THEN LC=1 ELSE IF LC>10 THEN LC=10
  1058.     IF WC<1 THEN WC=1 ELSE IF WC>5 THEN  WC=5
  1059.     OX=LC: OY=WC: LM=LC-1: MN=WC-1
  1060.     LINE (3,12)-(320,59),0,BF
  1061.     PUT (3,12),SW,PSET
  1062.     GOSUB SM1
  1063. GOTO MAIN
  1064.  
  1065. CALC: ' Calculator Function.
  1066.       ' CSI Vapourware Division.
  1067.     GET (3,12)-(328,69),SW
  1068.     LINE (3,12)-(328,69),0,BF
  1069.     LINE (3,12)-(328,69),1,B
  1070.     LINE (5,14)-(326,67),1,B
  1071.     LOCATE 3,12: PRINT "Calculator Function.";
  1072.     LOCATE 4,10: PRINT "CSI Vapourware Division.";
  1073.     LOCATE 6,3:  PRINT "This exciting new feature of ETCH CGA";
  1074.     LOCATE 7,3:  PRINT "will be available real soon now, maybe";
  1075.     LOCATE 8,3:  PRINT "in the next version, we hope.";
  1076.     C1: QWERTY$=INKEY$
  1077.         IF QWERTY$="" THEN
  1078.                 GOTO C1
  1079.             ELSEIF QWERTY$=CHR$(27) THEN
  1080.                 LINE (3,12)-(320,69),0,BF
  1081.                 PUT (3,12),SW,PSET
  1082.                 GOTO MAIN
  1083.             ELSEIF QWERTY$=CHR$(127) THEN
  1084.                 LINE (3,12)-(320,69),0,BF
  1085.                 PUT (3,12),SW,PSET
  1086.                 GOTO HELP
  1087.             ELSEIF QWERTY$=CHR$(14) THEN
  1088.                 LINE (3,12)-(320,69),0,BF
  1089.                 PUT (3,12),SW,PSET
  1090.                 GOTO CLOCK
  1091.             ELSEIF QWERTY$=CHR$(15) THEN
  1092.                 LINE (3,12)-(320,69),0,BF
  1093.                 PUT (3,12),SW,PSET
  1094.                 GOTO DISKDIR
  1095.             ELSEIF QWERTY$=CHR$(17) THEN
  1096.                 LINE (3,12)-(320,69),0,BF
  1097.                 PUT (3,12),SW,PSET
  1098.                 GOTO HEADLINE
  1099.             ELSE GOTO C1
  1100.         END IF
  1101.  
  1102. TILE: 'Tile Function
  1103.     GET (164,12)-(481,197),SW
  1104.     LINE (164,12)-(481,197),0,BF: LINE (164,12)-(481,197),1,B
  1105.     LINE (166,14)-(479,195),1,B
  1106.     LOCATE 3,35: PRINT "Tile Function";
  1107.     LOCATE 4,23: PRINT "Move the ";CHR$(127);" with the cursor control";
  1108.     LOCATE 5,23: PRINT "keys onto the spaces on the tile that";
  1109.     LOCATE 6,23: PRINT "you wish to fill in.  Press the Space";
  1110.     LOCATE 7,23: PRINT "bar to fill in or remove a space on";
  1111.     LOCATE 8,23: PRINT "the tile.";
  1112.     LOCATE 10,23: PRINT "Press Return";
  1113.     LOCATE 11,23: PRINT "when done.";
  1114.     LOCATE 18,23: PRINT"Press Esc";
  1115.     LOCATE 19,23: PRINT"to cancel.";
  1116.     LINE (302,62)-(462,190),1,B
  1117.     FOR U=302 TO 462 STEP 20
  1118.         LINE (U,62)-(U,190),1
  1119.     NEXT U
  1120.     FOR U=62 TO 190 STEP 8
  1121.         LINE (302,U)-(462,U),1
  1122.     NEXT U
  1123.     LOCATE 3,23: PRINT CHR$(127);
  1124.     GET (176,16)-(184,22),CZ
  1125.     LOCATE 3,23: PRINT " ";
  1126.     PUT (309,63),CZ
  1127.     XI=20: YI=8: YLA=63: XLA=309
  1128.     TL1: FOB$=INKEY$: IF FOB$="" THEN GOTO TL1 ELSE GOTO TL2
  1129.     TL2: IF FOB$=" " THEN GOTO TL3
  1130.         IF FOB$=CHR$(13) THEN GOTO TL4
  1131.         IF FOB$=CHR$(27) THEN LINE (164,12)-(481,197),0,BF: PUT (164,12),SW: GOTO MAIN
  1132.         IF LEN(FOB$)=2 THEN GOTO TL5 ELSE GOTO TL1
  1133.         TL5: HK=ASC(RIGHT$(FOB$,1))
  1134.             PUT (XLA,YLA),CZ
  1135.             IF HK=72 THEN
  1136.                     YLA=YLA-YI
  1137.                 ELSEIF HK=75 THEN
  1138.                     XLA=XLA-XI
  1139.                 ELSEIF HK=77 THEN
  1140.                     XLA=XLA+XI
  1141.                 ELSEIF HK=80 THEN
  1142.                     YLA=YLA+YI
  1143.             END IF
  1144.             IF YLA<63 THEN
  1145.                     YLA=183
  1146.                 ELSEIF YLA>186 THEN
  1147.                     YLA=63
  1148.             END IF
  1149.             IF XLA<302 THEN
  1150.                     XLA=449
  1151.                 ELSEIF XLA>462 THEN
  1152.                     XLA=309
  1153.             END IF
  1154.             PUT (XLA,YLA),CZ
  1155.         GOTO TL1
  1156.     TL3:
  1157.     LINE (XLA-6,YLA)-(XLA+12,YLA+6),(1-POINT (XLA-1,YLA)),BF
  1158.     PUT (XLA,YLA),CZ
  1159.     GOTO TL1
  1160.     TL4: PUT (XLA,YLA),CZ: RPG$=""
  1161.     FOR U=63 TO 183 STEP 8: BORNE=7: WL=0
  1162.         FOR V=303 TO 443 STEP 20
  1163.             IF POINT(V,U)=1 THEN WL=WL+(2^BORNE)
  1164.             BORNE=BORNE-1
  1165.             LOCATE 15,23: PRINT "Calculating";
  1166.             LOCATE 15,23: PRINT "           ";
  1167.         NEXT V
  1168.         IF WL=0 THEN NP=NP+1 ELSE NP=0
  1169.         IF NP>2 THEN ELSE RPG$=RPG$+CHR$(WL)
  1170.     NEXT U
  1171.     LINE (164,12)-(481,197),0,BF: PUT (164,12),SW
  1172.     PAINT (X,Y),RPG$
  1173. GOTO MAIN
  1174.  
  1175. MAGNIFY: ' Magnification Function.
  1176.     LOCATE 1,65: PRINT"         ";: LOCATE 1,65: PRINT 265;" ";88;"  ";
  1177.     GET (0,0)-(51,25),SW: LINE (0,0)-(51,25),0,BF
  1178.     LINE (0,0)-(51,25),1,B: GET (0,0)-(51,25),WS
  1179.     LINE (0,0)-(51,25),0,BF: PUT (0,0),SW
  1180.     XLA=265: YLA=88: PUT (XLA-1,YLA-1),WS: UJ$=""
  1181.     MG1: EJ$=INKEY$
  1182.         IF EJ$<>"" THEN UJ$=EJ$: GOTO MG1
  1183.         IF LEN(UJ$)=2 THEN
  1184.             GOTO MG2
  1185.         ELSEIF UJ$=CHR$(13) THEN
  1186.             PUT (XLA-1,YLA-1),WS
  1187.             LINE (0,0)-(639,8),1,BF
  1188.             GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  1189.             GOTO MG3
  1190.         ELSEIF UJ$=CHR$(27) THEN
  1191.             PUT (XLA-1,YLA-1),WS
  1192.             LINE (0,0)-(639,8),1,BF
  1193.             GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4
  1194.             GOTO MAIN
  1195.         ELSEIF UJ$="1" THEN
  1196.             AJ=XLA: BJ=YLA
  1197.             XLA=XLA-10: YLA=YLA+5 : GOTO MGS
  1198.         ELSEIF UJ$="2" THEN
  1199.             AJ=XLA: BJ=YLA
  1200.             YLA=YLA+5 :           : GOTO MGS
  1201.         ELSEIF UJ$="3" THEN
  1202.             AJ=XLA: BJ=YLA
  1203.             XLA=XLA+10: YLA=YLA+5 : GOTO MGS
  1204.         ELSEIF UJ$="4" THEN
  1205.             AJ=XLA: BJ=YLA
  1206.             XLA=XLA-10:           : GOTO MGS
  1207.         ELSEIF UJ$="6" THEN
  1208.             AJ=XLA: BJ=YLA
  1209.             XLA=XLA+10:           : GOTO MGS
  1210.         ELSEIF UJ$="7" THEN
  1211.             AJ=XLA: BJ=YLA
  1212.             XLA=XLA-10: YLA=YLA-5 : GOTO MGS
  1213.         ELSEIF UJ$="8" THEN
  1214.             AJ=XLA: BJ=YLA
  1215.             YLA=YLA-5 :           : GOTO MGS
  1216.         ELSEIF UJ$="9" THEN
  1217.             AJ=XLA: BJ=YLA
  1218.             XLA=XLA+10: YLA=YLA-5 : GOTO MGS
  1219.         ELSE GOTO MG1
  1220.         END IF
  1221.     MG2: QJ=ASC(RIGHT$(UJ$,1)): AJ=XLA: BJ=YLA
  1222.         IF QJ=80 THEN
  1223.                 YLA=YLA+1
  1224.             ELSEIF QJ=72 THEN
  1225.                 YLA=YLA-1
  1226.             ELSEIF QJ=77 THEN
  1227.                 XLA=XLA+1
  1228.             ELSEIF QJ=75 THEN
  1229.                 XLA=XLA-1
  1230.             ELSEIF QJ=71 THEN
  1231.                 XLA=XLA-1
  1232.                 YLA=YLA-1
  1233.             ELSEIF QJ=73 THEN
  1234.                 XLA=XLA+1
  1235.                 YLA=YLA-1
  1236.             ELSEIF QJ=79 THEN
  1237.                 XLA=XLA-1
  1238.                 YLA=YLA+1
  1239.             ELSEIF QJ=81 THEN
  1240.                 XLA=XLA+1
  1241.                 YLA=YLA+1
  1242.             ELSE GOTO MG1
  1243.         END IF
  1244. MGS:    IF XLA<2 THEN XLA=588 ELSE IF XLA>588 THEN XLA=2
  1245.         IF YLA<12 THEN YLA=174 ELSE IF YLA>174 THEN YLA=12
  1246.         LOCATE 1,65: PRINT XLA;" ";YLA;"  ";
  1247.         PUT (AJ-1,BJ-1),WS: PUT (XLA-1,YLA-1),WS
  1248.     UJ$="": GOTO MG1
  1249.     MG3: LX$=STR$(XLA): LY$=STR$(YLA)
  1250.         IF (VAL(LX$)>270 AND VAL(LX$)<319) THEN GOSUB MG4
  1251.     GOSUB MG5
  1252.     XLA=VAL(LX$): YLA=VAL(LY$)
  1253.     GET (0+PX,0)-(317+PX,199),SW
  1254.     LINE (0+PX,0)-(317+PX,199),0,BF
  1255.     LINE (0+PX,0)-(K4+PX,L4),1,B
  1256.  
  1257.     GET (0+PX,0)-(K4+PX,L4),WS
  1258.     LINE (0+PX,0)-(K4+PX,L4),0,B
  1259.     LINE (0+PX,0)-(317+PX,199),1,B
  1260.     LINE (2+PX,2)-(315+PX,197),1,B
  1261.  
  1262.     LOCATE 2,3+PD: PRINT CHR$(127);
  1263.     GET (16+PB,9)-(22+PB,14),PLU
  1264.     LOCATE 2,3+PD: PRINT " ";
  1265.     LOCATE 22,3+PC: PRINT "Use the ";CHR$(127);" pointer to modify.";
  1266.     LOCATE 23,3+PC: PRINT "Press Return to resume Graphics Mode.";
  1267.     LOCATE 24,3+PC: PRINT "Press Esc to cancel function.";
  1268.     PUT (XLA-1,YLA-1),WS: GET (XLA,YLA)-(XLA+49,YLA+24),EN
  1269.     FOR UY=YLA TO YLA+24
  1270.         FOR UX=XLA TO XLA+49
  1271.             LINE (6*(UX-(XLA-1))+PX,6*(UY-(YLA-1)))-((6*(UX-(XLA-1))+4)+PX,(6*(UY-(YLA-1))+4)),POINT(UX,UY),BF
  1272.         NEXT UX
  1273.     NEXT UY
  1274.     MX=5+PB: MY=6: MNK=6: EH=XLA+URE: BE=YLA: PUT (MX,MY),PLU: UA$="": MA$=""
  1275.     MG6: UA$=INKEY$: IF UA$<>"" THEN MA$=UA$: GOTO MG6
  1276.         IF MA$=" " THEN GOTO MG7 ELSE IF MA$=CHR$(13) THEN GOTO MG8 ELSE IF MA$=CHR$(27) THEN GOTO MG9
  1277.         IF LEN(MA$)=2 THEN GOTO MG10 ELSE GOTO MG6
  1278.     MG10: MQ=ASC(RIGHT$(MA$,1)): AM=MX: BM=MY
  1279.         IF MQ=72 THEN
  1280.                 MY=MY-MNK
  1281.                 BE=BE-1
  1282.             ELSEIF MQ=80 THEN
  1283.                 MY=MY+MNK
  1284.                 BE=BE+1
  1285.             ELSEIF MQ=77 THEN
  1286.                 MX=MX+MNK
  1287.                 EH=EH+1
  1288.             ELSEIF MQ=75 THEN
  1289.                 MX=MX-MNK
  1290.                 EH=EH-1
  1291.             ELSEIF MQ=71 THEN
  1292.                 MX=MX-MNK
  1293.                 MY=MY-MNK
  1294.                 EH=EH-1
  1295.                 BE=BE-1
  1296.             ELSEIF MQ=73 THEN
  1297.                 MX=MX+MNK
  1298.                 MY=MY-MNK
  1299.                 EH=EH+1
  1300.                 BE=BE-1
  1301.             ELSEIF MQ=79 THEN
  1302.                 MX=MX-MNK
  1303.                 MY=MY+MNK
  1304.                 EH=EH-1
  1305.                 BE=BE+1
  1306.             ELSEIF MQ=81 THEN
  1307.                 MX=MX+MNK
  1308.                 MY=MY+MNK
  1309.                 EH=EH+1
  1310.                 BE=BE+1
  1311.         END IF
  1312.         IF MX<5+PX THEN MX=299+PX: EH=XLA+49
  1313.         IF MX>299+PX THEN MX=5+PX: EH=XLA
  1314.         IF MY<6 THEN MY=150: BE=YLA+24
  1315.         IF MY>150 THEN MY=6: BE=YLA
  1316.         PUT (AM,BM),PLU
  1317.         PUT (MX,MY),PLU
  1318.     MA$="": GOTO MG6
  1319.     MG7: PUT (MX,MY),PLU
  1320.         LINE (MX+1,MY)-(MX+5,MY+4),1-(POINT(MX+1,MY)),BF
  1321.         PUT (MX,MY),PLU
  1322.         PSET (EH,BE),1-(POINT(EH,BE))
  1323.         MA$=""
  1324.     GOTO MG6
  1325.     MG8: PUT (MX,MY),PLU
  1326.     GOTO MG11
  1327.     MG9: PUT (MX,MY),PLU
  1328.         LINE (0+PX,0)-(317+PX,199),0,BF
  1329.         PUT (0+PX,0),SW
  1330.         PUT (XLA-1,YLA-1),WS
  1331.         LINE (XLA,YLA)-(XLA+49,YLA+24),0,BF
  1332.         PUT (XLA,YLA),EN
  1333.     GOTO MGEXIT
  1334.     MG11: LINE (0+PX,0)-(317+PX,199),0,BF
  1335.         PUT (0+PX,0),SW
  1336.         PUT (XLA-1,YLA-1),WS
  1337.     MGEXIT:
  1338.         LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  1339.         GOTO MAIN
  1340.  
  1341. MG4: ' Option C.1
  1342.      LX$=STR$(270)
  1343. RETURN
  1344.  
  1345. MG5: ' Nooooooo Trouble
  1346.     K4=51: L4=26
  1347.     IF VAL(LX$)<319 THEN
  1348.             PD=41
  1349.             PC=40
  1350.             PX=322
  1351.             PB=328
  1352.             URE=1
  1353.         ELSE PC=0
  1354.             PX=0
  1355.             PD=0
  1356.             PB=0
  1357.             URE=0
  1358.     END IF
  1359. RETURN
  1360.  
  1361. HEADLINE: ' Headline Subroutine.
  1362.     GET (3,12)-(634,75),SW: LINE (3,12)-(634,75),0,BF
  1363.     LINE (3,12)-(634,75),1,B: LINE (5,14)-(632,73),1,B
  1364.     LOCATE 3,12: PRINT"Headline/Marquee Function."
  1365.     LOCATE 4,2 : PRINT"Define box to hold marquee....";
  1366.     LOCATE 5,2:  PRINT"Box defined from (";: PRINT USING "###";X;
  1367.     PRINT ",";: PRINT USING "###";Y;: PRINT ") to (____,____)";
  1368.         BL=48: BU=57: REY=5: REX=33: MAXL=3: GOSUB RECIEVE
  1369.         H=VAL(HW$)
  1370.         BL=48: BU=57: REY=5: REX=38: MAXL=3: GOSUB RECIEVE
  1371.         K=VAL(HW$)
  1372.     IF H<0 THEN H=0 ELSE IF H>639 THEN H=639
  1373.     IF K<10 THEN K=10 ELSE IF K>199 THEN K=199
  1374.  
  1375.     LOCATE 6,2: PRINT"Enter Headline...";
  1376.     LOCATE 7,2: PRINT STRING$(70,"_");
  1377.         BL=32: BU=126: REY=7: REX=2: MAXL=70: GOSUB RECIEVE
  1378.         LA=LEN(HW$)
  1379.     LOCATE 9,2: PRINT"Press Return to continue, Esc to Cancel.";
  1380.     H4: ER$=INKEY$: IF ER$="" THEN GOTO H4
  1381.         IF ER$=CHR$(13) THEN GOTO H6 ELSE IF ER$=CHR$(27) THEN GOTO H5 ELSE GOTO H4
  1382.     H5: LINE (3,12)-(634,75),0,BF: PUT (3,12),SW: GOTO MAIN
  1383.     H6: LINE (3,12)-(634,75),0,BF: PUT (3,12),SW
  1384.         GET (0,0)-(639,9),SW: LOCATE 1,1: PRINT SPC(79);
  1385.         LOCATE 1,1: PRINT HW$;: LA=LEN(HW$)
  1386.         IF X>H THEN OP=H: QR=X ELSE OP=X: QR=H
  1387.         IF Y>K THEN ST=K: UV=Y ELSE ST=Y: UV=K
  1388.         LINE (OP,ST)-(QR,UV),0,BF
  1389.         FX=((QR-OP)/(LA*8)): FY=(UV-ST)/8
  1390.         FOR HS1=0 TO (8*LA)-1
  1391.             FOR HS2=0 TO 7
  1392.                 LINE ((HS1*FX)+OP,(HS2*FY)+ST)-((HS1*FX)+OP+FX,(HS2*FY)+ST+FY),POINT(HS1,HS2),BF
  1393.             NEXT HS2
  1394.         NEXT HS1
  1395.         LOCATE 1,1: PRINT SPC(79);: PUT (0,0),SW
  1396. GOTO MAIN
  1397.  
  1398. RECIEVE: ' Get input of from keyboard.
  1399.     HW$=""
  1400.     R1: LT$=INKEY$: IF LT$="" THEN GOTO R1
  1401.         IF LEN(LT$)>1 THEN GOTO R1
  1402.         IF LEN(HW$)=0 AND LT$=CHR$(8) THEN GOTO R1
  1403.         IF LT$=CHR$(8) THEN HW$=LEFT$(HW$,LEN(HW$)-1): GOTO R2
  1404.         IF LT$=CHR$(13) THEN GOTO R3
  1405.         IF LEN(HW$)=MAXL THEN GOTO R1
  1406.         IF ASC(LT$)<BL OR ASC(LT$)>BU THEN GOTO R1
  1407.         HW$=HW$+LT$
  1408.         LOCATE REY,REX+LEN(HW$)-1,0: PRINT LT$;
  1409.         R2: LOCATE REY,REX,0: PRINT HW$" ";
  1410.             GOTO R1
  1411.         R3: RETURN
  1412.  
  1413. ETCHCOM: ' Menu of commands.
  1414.     GET (0,0)-(304,108),SX
  1415.     LINE (0,0)-(304,108),0,BF
  1416.     LINE (0,0)-(304,108),1,B
  1417.     LINE (2,2)-(302,106),1,B
  1418.     LINE (10,8)-(101,15),1,BF
  1419.     GET (10,8)-(101,15),GB
  1420.     LINE (10,8)-(101,15),0,BF
  1421.     LOCATE 2,3:  PRINT "Help         Jump        Text";
  1422.     LOCATE 3,3:  PRINT "Box          Clear       Reverse";
  1423.     LOCATE 4,3:  PRINT "Circle       Line        Reverse..";
  1424.     LOCATE 5,3:  PRINT "Draw         Magnify     Clock";
  1425.     LOCATE 6,3:  PRINT "Erase        Name        Directory";
  1426.     LOCATE 7,3:  PRINT "Fill         Cursor      Calculator";
  1427.     LOCATE 8,3:  PRINT "Fill..       Step        Headline";
  1428.     LOCATE 9,3:  PRINT "Move         Restore     Quit";
  1429.     LOCATE 10,3: PRINT "Home         Store       Cancel";
  1430.     LOCATE 12,3: PRINT "Use TAB or SPACE to select a";
  1431.     LOCATE 13,3: PRINT "command.  Press RETURN to execute.";
  1432.     BN=1: EX1=10: EY1=(BN-1)*8+8: PUT (EX1,EY1),GB,XOR: GOSUB E1
  1433.     E2: A$=INKEY$
  1434.         IF A$="" THEN
  1435.             GOTO E2
  1436.         ELSEIF A$=" " THEN
  1437.             BN=BN+1
  1438.         ELSEIF A$=CHR$(9) THEN
  1439.             BN=BN+9
  1440.         ELSEIF A$=CHR$(13) THEN
  1441.             GOTO SELECT
  1442.         ELSE GOTO E2
  1443.     END IF
  1444.     IF BN=36 THEN
  1445.         BN=1
  1446.         GOSUB E1
  1447.     ELSEIF BN=28 AND A$=" " THEN
  1448.         BN=1
  1449.         GOSUB E1
  1450.     ELSEIF BN>27 THEN
  1451.         BN=BN-26
  1452.         GOSUB E1
  1453.     ELSEIF BN>18 THEN
  1454.         GOSUB E5
  1455.     ELSEIF BN>9 THEN
  1456.         GOSUB E3
  1457.     ELSEIF BN>0 THEN
  1458.         GOSUB E1
  1459.     END IF
  1460.     GOTO E2
  1461.     E1: PUT (EX1,EY1),GB,XOR
  1462.         EX1=10: EY1=(BN-1)*8+8
  1463.         PUT (EX1,EY1),GB,XOR
  1464.     RETURN
  1465.     E3: PUT (EX1,EY1),GB,XOR
  1466.         EX1=106: EY1=(BN-10)*8+8
  1467.         PUT (EX1,EY1),GB,XOR
  1468.     RETURN
  1469.     E5: PUT (EX1,EY1),GB,XOR
  1470.         EX1=206: EY1=(BN-19)*8+8
  1471.         PUT (EX1,EY1),GB,XOR
  1472.     RETURN
  1473.     SELECT:
  1474.         LINE (0,0)-(304,108),0,BF
  1475.         PUT (0,0),sx,PSET
  1476.         IF BN=4 THEN A$="D" ELSE IF BN=5 THEN A$="E" ELSE IF BN=9 THEN A$="H"
  1477.         ON BN GOTO HELP,BOX,DCIRCLE,EDRAW,ETRASH,FILL,TILE,MOVE,HOME,JUMP,_
  1478.         PURGE,DLINE,MAGNIFY,RENAME,CURSOR,CSTEP,DLOAD,DSAVE,TEXT,NEGA1,NEGA2,_
  1479.         CLOCK,DISKDIR,CALC,HEADLINE,QUIT,CANCEL
  1480. CANCEL: A$="": GOTO MAIN
  1481.  
  1482. PLARGE: ' Large screen dump.
  1483.     LPRINT CHR$(27)+"A"+CHR$(8);: AQ=0
  1484.     IF YARBLOCKO=2 THEN LPRINT CHR$(27)+"2"
  1485.     WIDTH "LPT1:",255: LOCATE 1,1: PRINT SPC(79);" ";
  1486.     FOR K=8 TO 196 STEP 4
  1487.         LPRINT CHR$(27)+"*"+CHR$(4)+CHR$(128)+CHR$(2);
  1488.         FOR L=0 TO 639
  1489.             FOR M=0 TO 3
  1490.                 AWP=(6-(2*M)): BWP=AWP+1
  1491.                 IF POINT (L,K+M)=1 THEN AQ=AQ+(2^AWP)+(2^BWP)
  1492.             NEXT M
  1493.             LPRINT CHR$(AQ);: AQ=0
  1494.         NEXT L
  1495.         LPRINT
  1496.     NEXT K
  1497.     LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  1498. GOTO MAIN
  1499.  
  1500. PSMALL: ' Small screen dump.
  1501.     LPRINT CHR$(27)+"A"+CHR$(8);: AQ=0
  1502.     IF YARBLOCKO=2 THEN LPRINT CHR$(27)+"2"
  1503.     WIDTH "LPT1:",255: LOCATE 1,1: PRINT SPC(79);" ";
  1504.     FOR K=8 TO 192 STEP 8
  1505.         LPRINT CHR$(27)+"*"+CHR$(3)+CHR$(0)+CHR$(5);
  1506.         FOR L=0 TO 639
  1507.             FOR M=0 TO 7
  1508.                 IF POINT (L,K+M)=1 THEN AQ=AQ+(2^(7-M))
  1509.             NEXT M
  1510.             LPRINT CHR$(AQ)+CHR$(0);: AQ=0
  1511.         NEXT L
  1512.         LPRINT
  1513.     NEXT K
  1514.     LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  1515. GOTO MAIN
  1516.  
  1517. ICON: ' Retrieve pre-programmed symbols from disk.
  1518.     DEF SEG=&HB800
  1519.     GET (0,0)-(639,199),SW
  1520.     CLS: LINE (0,0)-(49,25),1,BF: GET (0,0)-(49,25),EN: LINE (0,0)-(49,25),0,BF
  1521.     LINE (0,0)-(58,10),1,BF: GET (0,0)-(58,10),PLU: LINE (0,0)-(58,10),0,BF
  1522.     I=1: J=1: H=((I-1)*50)+9: K=((J-1)*35)+14: BLOAD FONT$,0
  1523.     LOCATE 1,1: PRINT " Select a symbol with the cursor keys, and press Return.  Esc cancels function.";
  1524.     PUT (H,K),EN,XOR
  1525.  
  1526. IC1: A$=INKEY$
  1527.     IF A$="" THEN
  1528.             GOTO IC1
  1529.     ELSEIF A$=CHR$(13) THEN
  1530.             GOTO IC2
  1531.     ELSEIF A$=CHR$(27) THEN
  1532.             PUT (0,0),SW,PSET
  1533.             LINE (0,0)-(639,8),1,BF
  1534.             GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  1535.             GOTO MAIN
  1536.     ELSEIF LEN(A$)=2 THEN
  1537.             AQ=ASC(RIGHT$(A$,1))
  1538.             J2=J: I2=I
  1539.             IF AQ=72 THEN
  1540.                     J=J-1
  1541.             ELSEIF AQ=80 THEN
  1542.                     J=J+1
  1543.             ELSEIF AQ=75 THEN
  1544.                     I=I-1
  1545.             ELSEIF AQ=77 THEN
  1546.                     I=I+1
  1547.             ELSE GOTO IC1
  1548.             END IF
  1549.             IF I<1 THEN I=12 ELSE IF I>12 THEN I=1
  1550.             IF J<1 THEN J=4 ELSE IF J>4 THEN J=1
  1551.             PUT (H,K),EN,XOR: H=((I-1)*50)+9: K=((J-1)*35)+14
  1552.             PUT (H,K),EN,XOR
  1553.             GOTO IC1
  1554.     ELSE GOTO IC1
  1555.     END IF
  1556.  
  1557. IC2: 'Choose bit-mapping option.
  1558.     LOCATE 1,1: PRINT SPC(79);" ";: LOCATE 24,1: PRINT "        Select bit-mapping option, and press Return.  Esc cancels function.";
  1559.     PUT (H,K),EN,XOR: GET (H,K)-(H+48,K+25),EN: I=1: H=((I-1)*107)+78
  1560.     PUT (H,150),PLU,XOR
  1561.  
  1562. IC3: A$=INKEY$
  1563.     IF A$="" THEN
  1564.         GOTO IC3
  1565.     ELSEIF A$=CHR$(13) THEN
  1566.         GOTO IC4
  1567.     ELSEIF A$=CHR$(27) THEN
  1568.         PUT (0,0),SW,PSET
  1569.         LINE (0,0)-(639,8),1,BF
  1570.         GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  1571.         GOTO MAIN
  1572.     ELSEIF LEN(A$)=2 THEN
  1573.         AQ=ASC(RIGHT$(A$,1))
  1574.         IF AQ=75 THEN
  1575.             I=I-1
  1576.         ELSEIF AQ=77 THEN
  1577.             I=I+1
  1578.         ELSE GOTO IC3
  1579.         END IF
  1580.         IF I<1 THEN I=5 ELSE IF I>5 THEN I=1
  1581.         PUT (H,150),PLU,XOR: H=((I-1)*107)+78
  1582.         PUT (H,150),PLU,XOR
  1583.         GOTO IC3
  1584.     ELSE GOTO IC3
  1585.     END IF
  1586. IC4: F=I: PUT (0,0),SW,PSET: I=15: J=11: IB=I+49: JB=J+25
  1587.     GET (I,J)-(IB,JB),PLU
  1588.     GOSUB IC6
  1589. IC5: A$=INKEY$: I2=I: J2=J
  1590.     IF A$="" THEN
  1591.         GOTO IC5
  1592.     ELSEIF A$=CHR$(13) THEN
  1593.         GOSUB IC7
  1594.         GOSUB IC6
  1595.         LINE (0,0)-(639,8),1,BF
  1596.         GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  1597.         GOTO MAIN
  1598.     ELSEIF A$=CHR$(27) THEN
  1599.         GOSUB IC7
  1600.         LINE (0,0)-(639,8),1,BF
  1601.         GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
  1602.         GOTO MAIN
  1603.     ELSEIF A$="1" THEN
  1604.         I=I-10: J=J+5:  GOTO IC90
  1605.     ELSEIF A$="2" THEN
  1606.         J=J+5:          GOTO IC90
  1607.     ELSEIF A$="3" THEN
  1608.         I=I+10: J=J+5:  GOTO IC90
  1609.     ELSEIF A$="4" THEN
  1610.         I=I-10:         GOTO IC90
  1611.     ELSEIF A$="6" THEN
  1612.         I=I+10:         GOTO IC90
  1613.     ELSEIF A$="7" THEN
  1614.         I=I-10: J=J-5:  GOTO IC90
  1615.     ELSEIF A$="8" THEN
  1616.         J=J-5:          GOTO IC90
  1617.     ELSEIF A$="9" THEN
  1618.         I=I+10: J=J-5:  GOTO IC90
  1619.     ELSEIF LEN(A$)=2 THEN
  1620.         AQ=ASC(RIGHT$(A$,1))
  1621.         IF AQ=71 THEN
  1622.             I=I-1: J=J-1
  1623.         ELSEIF AQ=72 THEN
  1624.             J=J-1
  1625.         ELSEIF AQ=73 THEN
  1626.             I=I+1: J=J-1
  1627.         ELSEIF AQ=75 THEN
  1628.             I=I-1
  1629.         ELSEIF AQ=77 THEN
  1630.             I=I+1
  1631.         ELSEIF AQ=79 THEN
  1632.             I=I-1: J=J+1
  1633.         ELSEIF AQ=80 THEN
  1634.             J=J+1
  1635.         ELSEIF AQ=81 THEN
  1636.             I=I+1: J=J+1
  1637.         ELSE GOTO IC5
  1638.         END IF
  1639. IC90:   GOSUB IC8
  1640.         IF I<1 THEN I=589 ELSE IF I>589 THEN I=1
  1641.         IF J<11 THEN J=174 ELSE IF J>174 THEN J=11
  1642.         GET (I,J)-(I+49,J+25),PLU
  1643.         GOSUB IC6
  1644.         GOTO IC5
  1645.     ELSE GOTO IC5
  1646.     END IF
  1647.  
  1648. IC6: ON F GOTO WON,TOO,TREE,FO,FI
  1649. WON:  PUT (I,J),EN,PSET:   RETURN
  1650. TOO:  PUT (I,J),EN,PRESET: RETURN
  1651. TREE: PUT (I,J),EN,AND:    RETURN
  1652. FO:   PUT (I,J),EN,OR:     RETURN
  1653. FI:   PUT (I,J),EN,XOR:    RETURN
  1654.  
  1655. IC7:  PUT (I,J),PLU,PSET:  RETURN
  1656. IC8:  PUT (I2,J2),PLU,PSET: RETURN
  1657.  
  1658. FONT: 'Change font type, and display.
  1659.     IF A$="-" THEN FONT=FONT-1
  1660.     IF A$="+" THEN FONT=FONT+1
  1661.     IF FONT=0 THEN FONT=MXF
  1662.     IF FONT>MXF THEN FONT=1
  1663.     FONT$=PTH$+"FONT"+RIGHT$(STR$(FONT),1)+".DAT"
  1664.     GOSUB SM5
  1665. GOTO MAIN
  1666.  
  1667. QUIT: ' Exit ETCH CGA
  1668.     SCREEN 0,0,0
  1669.     CLS
  1670. END
  1671.  
  1672.  
  1673.